들어가며

최근에 본 책인 <<함수형 사고>>, <<켄트 백의 구현 패턴>>, <> 에 대해 간단하게 소감을 남기려고 한다.

함수형 사고(Functional Thinking)

이 책은 회사에서 스터디 부교재로 구매한 책이다. 이번 연휴 때 훑어보았는데, 좋은 인상을 받지는 못했다. 최근에 프로잭트에 들어가면서 이전에 작업한 개발자들이 쓴 Optional 이나 Stream API를 보면서, 자바 8에 추가된 함수형 문법들을 어떻게 활용할지에 대해 고민이 많았다.

자바 개발자이다 보니 OOP 기반으로 작업을 하고 지엽적인 부분만 자바 8에서 추가된 문법을 사용하는데, 그 또한 조화롭게 녹아드는 느낌이 아니라서 그에 대한 해법을 제공해주지 않을까 기대했지만, 책의 내용은 그렇지 않았다.

대부분 이런 내용이다.

  1. 자바에서는 이렇게 구현되어 있다.
  2. 이건 비효율적인 구현이고, 클로저 / 스칼라 / 자바 8 API 를 통해 함수형으로 변경할 수 있다.
  3. 함수형으로 변경하면 여러 면에서 이점이 있음

작업 시에 함수형 프로그래밍 문법을 사용하는 것은 찾아보면 알 수 있는 부분인데 이를 실제 코드에 유지보수가 가능하게 녹이는 방법을 알려주었으면 더 좋았을 거 같다. reduce 나 memorization, filter, map 을 어떻게 사용하는지 알려주는 부분에서는 약간의 인사이트를 얻을 수 있었지만, 실제 개발에 녹이기에는 좀 모자란다고 느꼈다.

다른 언어에서 reduce, map, currying 같은 걸 한 번도 사용해보지 않았다면 간단하게 보기에는 좋은 책인 거 같다. 팀에서 동의한다면, 위의 문법들을 적절하게 도입함으로써 여러 장점을 취할 수도 있을 거 같다.

책의 뒷면에는

객체지향과 함수형 사이에 놓인 늪을 건너는 방법

이라고 쓰여 있는데, 늪의 깊이가 얕아지지는 않은 느낌이다.

켄트 백의 구현 패턴

이전에 같은 팀에서 일했던 개발자가 다섯 번 본 책이라고 해서, 마침 가지고 있어서 틈틈이 보았다. 확실히 이 책은 다섯 번 본 이유를 알 거 같다.

이 책은 앞에 1~4장을 소개와 패턴, 프로그래밍 이론과 동기유발에 대해 간단하게 이야기하고 있다. 프로그래밍하면서 지켜야 하는 원칙에 관해서도 이야기하고 있는데, 하나하나가 사례를 들어서 이야기하면 20-30페이지는 이야기할 수 있을 거 같은 내용을 한 페이지 정도 할애해서 이야기하고 있다.

그 이후에 5장부터는 실제로 사용할 수 있는 77가지 패턴을 클래스, 상태, 행위, 메소드로 나눠서 설명하고 있다. 이후에 9장과 10장에서는 컬렉션과 프레임워크에서 사용할 수 있는 패턴들을 설명하고 있다.

책은 정말 좋고 중간중간 경험에서 우러나오는 인사이트들이 넘친다. 어렵고 이야기가 길어질 수 있는 개념들도 단순하게 정의하는 부분에서 대가의 풍미가 느껴진다.

클래스는 비슷한 성질을 가진 것을 총칭하며, 객체는 클래스가 구체화된 것이다.

같은 부분은 이견의 여지가 많겠지만, 클래스와 객체에 대해 간결하게 잘 설명하였다고 생각한다.

클래스의 로직과 데이터는 함께 사용되며, 로직은 데이터에 비해 변화율이 낮다. 클래스 내부의 데이터는 관련 로직에 의해 변화하며, 클래스 내부에서 사용하는 데이터의 변화율은 비슷하다.

그 이외에도 생각해 볼 문장들이 많다. 효과적인 객체 지향 프로그램을 하기 위해서는 상속을 선별적으로 사용하라는 것이나, 메서드 내부에서 호출하는 다른 메서드들은 추상화 수준이 비슷해야 한다는 조언은 금과옥조와 같다.

이 책의 아쉬운 점은 책이 너무 얇다는 점이다. 책이 너무 얇기 때문에, 어떤 상황에서 상속을 사용하는 것이 효율적이고 어떤 상황에서는 비효율적인지 구체적인 예를 알려주지는 않는다. 1~4장에서 프로그래밍 시 지켜야 하는 원칙 또한 하나하나 구체적으로 알려주면 좋을 거 같은데, ~ 같은 걸 지켜야 합니다. 로 넘어가고 있다. 얇은 책을 두꺼운 책보다 좋아하지만, 이건 아쉬운 지점이다.

또한 9장에서는 컬렉션에 대해 논하고 있는데, 다시 봐도 이 책에 9장이 왜 필요한지 이유를 잘 모르겠다. 다른 장들에 비해서 그냥 컬렉션은 이런 상속구조입니다. 정도로 넘어가고 있는데 빼버리거나 아니면 내용을 좀 더 보강하면 좋을 거 같다.

책의 내용은 너무 좋고 여러 번 읽어도 좋은 책이다.

CODE

먼저 고백하자면, 이 책은 다 못 읽었다. 25장 중에서 11장 까지밖에 못 보았다. 뒤로 갈수록 내용이 어려워지고, 하드웨어 기초가 탄탄하지 않은 나에게는 쉽지 않은 내용이었다.

그래도 한번 찍어 먹어보면 맛은 알 수 있는 법. 이 책 또한 명저이다. 이 책의 저자인 찰스 펫졸드는 마이크로소프트 MVP로 윈도우 프로그래밍 쪽에는 엄청나게 유명한 분이라고 한다. 윈도우 프로그래밍은 잘 모르는 나로서는 이 분의 책은 <> 가 처음인데, 놀랄 만큼 어려운 내용을 놀랄 만큼 쉽게 설명해 두었다.

1장에서는 아이 두 명이 비밀 이야기를 어떻게 전송할 지로 시작하기 때문에, 이렇게 손전등을 휘두르는 것으로 설명할 수 있을까? 라는 생각이 들지만, 점자와 이진부호, 전선과 릴레이를 통해 어떻게 정보를 전달하는지에 대해 쉽게 설명하는 것을 보고 여러 번 감탄했다.

전선과 릴레이, 점자와 이진부호를 보면서 지금 네트워크에서 사용하고 있는 기술들, 패리티 비트나 라우터가 갑자기 하늘에서 뿅 나타난 게 아니라 이와 같은 정보 전달 기술들이 발전해가면서 자연스럽게 발생한 것이라는 걸 알 수 있었다. 이런 기반지식을 먼저 알았더라면 좋았을 것이다.

<>는 펫졸드 스스로 최고의 역작이라고 뽑은 책이라고 한다. 진정한 대가이고 한 분야에 대해 깊이 통달하였다면, 어려운 지식도 어린아이가 이해할 수 있게 쓸 수 있다고 이 책은 이야기하고 있다.